var createError = require('http-errors');//typeScript声明可捕获异常类型
var express = require('express');//node.js web框架 
var path = require('path');//路径功能
var cookieParser = require('cookie-parser'); //cookie转换功能
var logger = require('morgan'); //日志功能
var ejs = require('ejs');//模板  ejs 
var bodyParser = require("body-parser");//格式转换
var session = require("express-session");//node.js session功能

//框架 核心 对象
var app = express();

/* ******************声明express数组协议采用json*************************** */
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());//cookie转换功能
app.use(session({
  secret : '123456',
  name:'kjx',
  cookie:{maxAge:60000},
  resave:false,
  saveUninitialized:true
}));
/* ******************声明express数组协议采用json*************************** */ 
 
/* *******************路由文件******************* */
var indexRouter = require('./routes/index');
//后期开发的路由写入此处
app.use('/', indexRouter);
/* *******************路由文件******************* */
var indexRouter = require('./routes/menuTree'); 
app.use('/acc',indexRouter);
/* *******************路由文件******************* */


/* **************node.js前端模板功能设计******************** */
app.use(express.static(path.join(__dirname, 'views'))); //声明views为外部可用地址 正常存放 js img css
app.use(express.static(path.join(__dirname, 'public'))); //声明public为外部可用地址 正常存放 js img css
app.set('views', path.join(__dirname, 'views'));  //声明模板路径。
app.engine('html', ejs.renderFile);//引擎模板
app.set('view engine', 'html'); //模板后缀
app.set('view cache', false); //不启用模板缓存
/* **************node.js前端模板功能设计******************** */

/* ******************日志级别 ： 开发级别*************************** */
app.use(logger('dev'));
/* ******************日志级别 ： 开发级别*************************** */

/**
 * 异常处理 ，针对404
 */
app.use(function(req, res, next) {
  next(createError(404));
});

app.use(function(err, req, res, next) {
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  res.status(err.status || 500);
  res.render('error');
  //返回指定的错误页面，提供友好的错误提示页面
});

module.exports = app;
